package com.bjpowernode.controller;
import com.bjpowernode.beans.Message;
import com.bjpowernode.dto.ResultDTO;
import com.bjpowernode.exception.MyException;
import com.bjpowernode.services.MessageServices;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.Valid;
import java.util.ArrayList;
import java.util.List;

@RestController
@RequestMapping("/admin/message")
public class MessageController {

    @Autowired
    MessageServices messageServices;

    @RequestMapping("getAll.action")
    public ResultDTO getAll(){
        ResultDTO resultDTO=new ResultDTO();
        ArrayList<Message> all = messageServices.getAll();
        resultDTO.setData(all);
        resultDTO.setMess("留言查询成功");
        return resultDTO;
    }
    @RequestMapping("add.action")
    public  ResultDTO add(@Valid Message message, BindingResult bindingResult) throws MyException {


        List<FieldError> fieldErrors = bindingResult.getFieldErrors();
        for (FieldError fieldError : fieldErrors) {
            throw new MyException(fieldError.getDefaultMessage());
        }


        ResultDTO resultDTO=new ResultDTO();
        messageServices.add(message);
        resultDTO.setData(null);
        resultDTO.setMess("留言添加成功");
        return resultDTO;
    }

    //SpringMVC接收前端逗号分割变成数组
    //SpringMVC参数是数组或者集合则，自动注入规则
    //http://localhost:8080/admin/message/del.action?id=5&id=7
    //http://localhost:8080/admin/message/del.action?id=5,7
    //http://localhost:8080/admin/message/del.action?id=12
    //前端请求的时候如何是ajax，则需要使用JSON类型的参数
    //如果数组或者集合里面的元素是数字，遇到转换问题，SpringMVC会报告400错误，并表示畸形语法，所以无序后端处理


    //如果有多个容器类型的参数，则直接封装成beans
    //如果仅有一个容器类型的参数，则可以指派前端传递一个纯字符的JSON数据
    //1——前端ajax可以使用contentType属性表达上传到服务端参数的类别
    //1-1:application/x-www-form-urlencoded 普通的参数，可以使用JSON的数据格式传递【这里要注意不同于纯字符的JSON数据】
    //1-2:application/json,只能使用纯字符的JSON数据，且后端必须使用@RequestBody配合
    //1-3:multipart/form-data 二进制内容参数
    @RequestMapping("del.action")
    public  ResultDTO del(@RequestBody int[] id) throws MyException {

        System.out.println("id:"+id);
        if(id==null){
            throw new MyException("你没有给出需要删除的id");
        }

        ResultDTO resultDTO=new ResultDTO();
        messageServices.del(id);
        resultDTO.setData(null);
        resultDTO.setMess("留言删除成功");
        return resultDTO;
    }

}
